从QT5.1开始,就慢慢加入了对Android的支持,虽然在Android上一直是Java开发占大多数,但由于Qt的结构成熟,功能强大,笔者最近也尝试了一下Qt的嵌入式开发.Qt为手持设备提供了触摸事件,但必须显式的设置接收触摸事件,之后的事件捕获与绘图都和PC上面差不多了.
Qt for Android Multi-touch
本文将实现一个多点触控的画图小程序,以演示Qt的多点触控.
示例代码下载
Qt程序默认不会产生触摸事件,因为触摸事件其实是由鼠标的一些事件生成的,要设置使用触摸事件,需要设置属性:
然后就可以捕获触摸事件了,这里我们重写event方法来捕获:
在event事件中,如果事件是一个触控事件,就交给添加线段的函数处理.
由于Qt已经完全开源,所有的类属性成员都可以从文档查到,这里就不多做介绍,不过要说明的是,在获得的TouchPoint中,包含本次点击位置pos()和上次点击位置lastPos(),当一个触摸事件刚产生时,lastPos()会被置为当前元素(0, 0)位置,所以在这里我没有使用TouchBegin事件,过滤掉了这个默认点.
最后,addLine函数会把所以滑过的线段保存起来,在控件的paintEvnet中,再将它们画出来,程序的功能就完成了:
下面是部署到真机上的测试效果,其中左边就是使用了TouchBegin时,会产生一个起始的(0, 0)点,右边是使用3个手指同时操作的效果: